package com.yixq.soa.service.web.annotation;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

import org.springframework.web.bind.annotation.Mapping;

/***
 * 接口版本注解<br>
 * 默认版本为"1",可以添加到方法或控制器上.控制器上和方法上不互通,不叠加,不覆盖.所以一个控制器只能选择添加在类上  或添加在函数上.<br>
 * 注意事项:<br>
 * 提取正则为"/v([0-9.]+)/?" ,请注意不要在url其他位置放置v后面加数字的组合,避免被错误识别.<br>
 * 一个控制器内只能选择放置在类型上或只放置在方法上.<br>
 *    放置在类型上 类型的 mapping 可以定义为 "/controllerName/{ver}" 这样控制器里所有的action都具备这个版本号.切可以统一切换.<br>
 *    放置在方法上方法需要具备{ver}段,例如"/actionName/{ver}" 这样做的好处是可以精细的升级某些接口.而不是整体的修改.<br>
 * 可以在方法上添加该代码来支持swagger <br>
 * {@code @ApiImplicitParam(name = "ver", value = "接口版本",paramType="path", required = true, dataType = "String",defaultValue="v1")}
 * @author kyler.tang
 *
 */
@Target({ElementType.METHOD,ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Mapping
public @interface Ver {
	public String value() default "1";
}
